{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Getting Started with AnyPyTools"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Running a simple macro"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"Tutorial_files/knee.gif\" alt=\"Drawing\" align=\"Right\" width=120 />\n",
    "\n",
    "For the sake of the tutorial we will use a small 'toy' model of a simplified knee joint (see the figure.) The model is defined in the file [Knee.any](Knee.any), which is placed in the current working directory.\n",
    "\n",
    "Next, let us run the model from python. First, we import the `AnyPyProcess` class and create an instance of the class.\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from anypytools import AnyPyProcess \n",
    "app = AnyPyProcess()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we need to instruct the AnyBody Modelling System to load the and run the model. We do this using _AnyScript_ macro commands. These are short commands that can automate operations in the AnyBody Modeling System (AMS). Operation that are normally done by pointing and clicking in the AMS graphical user interface. \n",
    "\n",
    "You can read more on _AnyScript_ macros in the \"User Interface Features\" tutorial that accompanies the AnyBody Modeling System.\n",
    "\n",
    "Now we define an _AnyScript_ macro that we want to run on the model.\n",
    "\n",
    "```\n",
    "load \"Knee.any\"\n",
    "operation Main.MyStudy.Kinematics\n",
    "run\n",
    "```\n",
    "\n",
    "The macro will command AnyBody to load the model and run the Kinematics operation. \n",
    "\n",
    "The macro is executed by parsing it to the `start_macro()` method of the `AnyPyProcess` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3894a7240733488091f71282139f093b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/1 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Completed: 1\n"
     ]
    }
   ],
   "source": [
    "macrolist = [\n",
    "    'load \"Knee.any\"',\n",
    "    'operation Main.MyStudy.Kinematics',\n",
    "    'run',\n",
    "]\n",
    "\n",
    "app.start_macro(macrolist);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Running multiple macros"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is easy to run multiple macros by adding an extra set of macro commands to the macro list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4b4642f56e5344c783603a3f1fd4f4af",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/2 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Completed: 2\n"
     ]
    }
   ],
   "source": [
    "macrolist = [\n",
    "    ['load \"Knee.any\"',\n",
    "     'operation Main.MyStudy.Kinematics',\n",
    "     'run'],\n",
    "    ['load \"Knee.any\"',\n",
    "     'operation Main.MyStudy.InverseDynamics',\n",
    "     'run'],\n",
    "]\n",
    "app.start_macro(macrolist);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Parallel execution"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that AnyPyProcess will run the anyscript macros in parallel. Modern computers have multiple cores, but a single AnyBody instance can only utilize a single core, leaving us with a great potential for speeding things up through parallelization.\n",
    "\n",
    "To test this, let us create ten macros in a for-loop. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "macrolist = []\n",
    "for i in range(40):\n",
    "    macro = [\n",
    "        'load \"Knee.any\"',              \n",
    "        'operation Main.MyStudy.InverseDynamics',\n",
    "        'run',\n",
    "    ]\n",
    "    macrolist.append(macro)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "AnyPyProcess has a parameter 'num_processes' that controls the number of parallel processes. Let us try a small example to see the difference in speed:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "507936e5207e44ec9d4272e9d3f743bd",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/40 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Completed: 40\n"
     ]
    }
   ],
   "source": [
    "# First sequentially\n",
    "app = AnyPyProcess(num_processes = 1)\n",
    "app.start_macro(macrolist);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6b8f17ee499b4320bbef4ac064cffc59",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/40 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Completed: 40\n"
     ]
    }
   ],
   "source": [
    "# Then with parallization\n",
    "app = AnyPyProcess(num_processes = 4)\n",
    "app.start_macro(macrolist);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Note*: In general you should not user a `num_processes` larger than the number of cores in your computer."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Getting data from the AnyBody Model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the following macro, we have added a new class operation to 'Dump' the result of the maximum muscle activity. The `start_macro` method will return all the dumped variables:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0ceec8ad7db7414fbba5fcf560b2597a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/1 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Completed: 1\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "macrolist = [\n",
    "    'load \"Knee.any\"',\n",
    "    'operation Main.MyStudy.InverseDynamics',\n",
    "    'run',\n",
    "    'classoperation Main.MyStudy.Output.MaxMuscleActivity \"Dump\"',\n",
    "] \n",
    "\n",
    "results = app.start_macro(macrolist)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can export more variables by adding more `classoperation`. But there is a better way of doing this, as we shall see in the next tutorials. \n",
    "\n",
    "Finally, to make a plot we import the `matplotlib` library, and enable inline figures."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_muscle_act = results[0]['Main.MyStudy.Output.MaxMuscleActivity']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "plt.plot(max_muscle_act);"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "interpreter": {
   "hash": "7840ed1e0d8c0fa6141b9782bb3c547b5e5fa4178e680f89033f8188680e7ee3"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.0"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "038e0133795041578af6416b3b529338": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0ceec8ad7db7414fbba5fcf560b2597a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_32b83ed3340b47e9b3f1dbf2a126171e",
        "IPY_MODEL_3148078fc5d642f8b3fe98693504a9f4",
        "IPY_MODEL_e1405d7ecc124975bd680a577805cc22"
       ],
       "layout": "IPY_MODEL_d4f9534578a94f9d8cc6d0c0befd1c5f"
      }
     },
     "150aad3e6a4a415a90fc227a79665b9e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_038e0133795041578af6416b3b529338",
       "style": "IPY_MODEL_83acbfecc0594dcaba2d3bd1533fcef3",
       "value": "100%"
      }
     },
     "1a375fe6b4384b6fb9bff4d0552c7673": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_21637136d4884f0e95d39329d3abaf62",
       "style": "IPY_MODEL_7c8a586e484b4a719de1eca2272fb178",
       "value": "100%"
      }
     },
     "1af44622829c4294955ef5cbe7d1d607": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "208d149848f34d0ebfff66a0e5b7135d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "21637136d4884f0e95d39329d3abaf62": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2bc61f27c9434772a5f222bf38bc6148": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "2da674cf084344189789d2f8281548bb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "3148078fc5d642f8b3fe98693504a9f4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_fda2cf827ee049e3a7664a7b36ba5e0a",
       "max": 1,
       "style": "IPY_MODEL_855981dd6596479e8daf6421a721c351",
       "value": 1
      }
     },
     "32b83ed3340b47e9b3f1dbf2a126171e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_e9cc6f729bd840b7baef014b0e9eefe7",
       "style": "IPY_MODEL_fb94187b176a4f079a17684f810528f5",
       "value": "100%"
      }
     },
     "3894a7240733488091f71282139f093b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_c27aec8b6b274003a21dc8ed20995983",
        "IPY_MODEL_5f2700786493433cb05f0de916b7a01a",
        "IPY_MODEL_9c13066159d1421585fc4956305f845f"
       ],
       "layout": "IPY_MODEL_7a17bd77ad224b9cb11d9ec77dc65e4a"
      }
     },
     "3cb00413495246b5bf8ba65871c170dd": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "46d2e908baf8439fbcaecccfc9829643": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_3cb00413495246b5bf8ba65871c170dd",
       "style": "IPY_MODEL_4ba3800318ac477cb56657e6dce06793",
       "value": "100%"
      }
     },
     "4b4642f56e5344c783603a3f1fd4f4af": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_1a375fe6b4384b6fb9bff4d0552c7673",
        "IPY_MODEL_b2a9ffa2983d4848a81a563e173c8e87",
        "IPY_MODEL_d9d138d1fcb441498a8c61e3b72933e4"
       ],
       "layout": "IPY_MODEL_208d149848f34d0ebfff66a0e5b7135d"
      }
     },
     "4ba3800318ac477cb56657e6dce06793": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "4d7ebb51ea4641bba8a4ad134916637d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4e29c8e0a7ff4e29b87299813951d83e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4ef9c185f96b4e35877d408cc677f531": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4f0eb23d26cf4cfc9b990cc9369b700b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "507936e5207e44ec9d4272e9d3f743bd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_150aad3e6a4a415a90fc227a79665b9e",
        "IPY_MODEL_f8f0e173843142aab52a6067dde5562f",
        "IPY_MODEL_5ce047b5e97841f8a44c84d4f081ce48"
       ],
       "layout": "IPY_MODEL_4e29c8e0a7ff4e29b87299813951d83e"
      }
     },
     "5ce047b5e97841f8a44c84d4f081ce48": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_91e0d6541c844a9cbb70958295566b29",
       "style": "IPY_MODEL_e895e4089e3246729983c6dc68991c2f",
       "value": " 40/40 [00:39&lt;00:00,  1.07it/s]"
      }
     },
     "5f2700786493433cb05f0de916b7a01a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_e4951310a5c6493caa7aa4e30b48d73d",
       "max": 1,
       "style": "IPY_MODEL_bb123cf25e9e457f896fd4e900b055c3",
       "value": 1
      }
     },
     "61cdbc29d5964aaba79332b6c1b9fd71": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "6ab49f196f694e0e942a8ad1c2083ba5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "6b8f17ee499b4320bbef4ac064cffc59": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_46d2e908baf8439fbcaecccfc9829643",
        "IPY_MODEL_ecdc9b9531484f38a3bac6a8073516b6",
        "IPY_MODEL_a0330762cf2e413f8f237fd588a37670"
       ],
       "layout": "IPY_MODEL_76cd35d330fa4801a729f67c776b60e6"
      }
     },
     "6dd8b36b2c67400d93a8c99f0c9709b7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "76cd35d330fa4801a729f67c776b60e6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7a17bd77ad224b9cb11d9ec77dc65e4a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7be5e9eceb61402ab2e5da1d7464351f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "7c8a586e484b4a719de1eca2272fb178": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "83a53e7dab034d21b5fb6b75c441a32b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "83acbfecc0594dcaba2d3bd1533fcef3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "855981dd6596479e8daf6421a721c351": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "91e0d6541c844a9cbb70958295566b29": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "939f80052ca54a84be271383a422dc6e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "9c13066159d1421585fc4956305f845f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_939f80052ca54a84be271383a422dc6e",
       "style": "IPY_MODEL_83a53e7dab034d21b5fb6b75c441a32b",
       "value": " 1/1 [00:00&lt;00:00,  1.39it/s]"
      }
     },
     "a0330762cf2e413f8f237fd588a37670": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_1af44622829c4294955ef5cbe7d1d607",
       "style": "IPY_MODEL_4f0eb23d26cf4cfc9b990cc9369b700b",
       "value": " 40/40 [00:28&lt;00:00,  1.59it/s]"
      }
     },
     "b2a9ffa2983d4848a81a563e173c8e87": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_c17b6bbe95944540b88d061ee4feb409",
       "max": 2,
       "style": "IPY_MODEL_b9a15dd9ccdb4372acf1b0d6c1d0ba3d",
       "value": 2
      }
     },
     "b9a15dd9ccdb4372acf1b0d6c1d0ba3d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "bb123cf25e9e457f896fd4e900b055c3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "c17b6bbe95944540b88d061ee4feb409": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c27aec8b6b274003a21dc8ed20995983": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_c9f3bb94474c44dea0bfa5dfbce63642",
       "style": "IPY_MODEL_61cdbc29d5964aaba79332b6c1b9fd71",
       "value": "100%"
      }
     },
     "c9f3bb94474c44dea0bfa5dfbce63642": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d4f9534578a94f9d8cc6d0c0befd1c5f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d9d138d1fcb441498a8c61e3b72933e4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_4d7ebb51ea4641bba8a4ad134916637d",
       "style": "IPY_MODEL_2bc61f27c9434772a5f222bf38bc6148",
       "value": " 2/2 [00:01&lt;00:00,  1.27s/it]"
      }
     },
     "e1405d7ecc124975bd680a577805cc22": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_4ef9c185f96b4e35877d408cc677f531",
       "style": "IPY_MODEL_2da674cf084344189789d2f8281548bb",
       "value": " 1/1 [00:01&lt;00:00,  1.13s/it]"
      }
     },
     "e4951310a5c6493caa7aa4e30b48d73d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e895e4089e3246729983c6dc68991c2f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "e9cc6f729bd840b7baef014b0e9eefe7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "ecdc9b9531484f38a3bac6a8073516b6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_6dd8b36b2c67400d93a8c99f0c9709b7",
       "max": 40,
       "style": "IPY_MODEL_f0cdf787876949e5a299b19803e7985c",
       "value": 40
      }
     },
     "f0cdf787876949e5a299b19803e7985c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "f8f0e173843142aab52a6067dde5562f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "bar_style": "success",
       "layout": "IPY_MODEL_6ab49f196f694e0e942a8ad1c2083ba5",
       "max": 40,
       "style": "IPY_MODEL_7be5e9eceb61402ab2e5da1d7464351f",
       "value": 40
      }
     },
     "fb94187b176a4f079a17684f810528f5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "fda2cf827ee049e3a7664a7b36ba5e0a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
